package controller

import (
	"github.com/gin-gonic/gin"
	"k8s-dash/dto"
	"k8s-dash/middleware"
	"k8s-dash/service"
	"k8s-dash/utils"
	"k8s-dash/utils/logger"
)

type nodeController struct{}

var NodeController nodeController

func (p *nodeController) Register(ginRouter *gin.RouterGroup) {
	nd := &nodeController{}
	ginRouter.GET("/k8s/node/list", nd.GetNodeList)
	ginRouter.GET("/k8s/node/detail", nd.GetNodeDetail)

}

// GetNodeList 获取node列表，支持分页过滤排序
// ListPage godoc
// @Summary      获取node列表
// @Description  获取node列表
// @Tags         node
// @ID           /api/k8s/node/list
// @Accept       json
// @Produce      json
// @Param        filter_name  query  string  false  "过滤"
// @Param        page         query  int     false  "页码"
// @Param        limit        query  int     false  "分页限制"
// @Success      200 {object}  middleware.Response"{"code": 200, msg="","data": service.NodeResp}"
// @Router       /api/k8s/node/list [get]
func (n *nodeController) GetNodeList(ctx *gin.Context) {
	parmas := &dto.NodeListInput{}
	//参数验证
	err := parmas.BindValidate(ctx)
	if err != nil {
		logger.LG.Error(utils.GetErrorMsg(utils.ParamBindError))
		middleware.ResponseError(ctx, utils.NewGlobalError(utils.ParamBindError, err))
		return
	}
	nodeList, err := service.Node.GetNodeList(parmas.FilterName, parmas.Limit, parmas.Page)
	if err != nil {
		logger.LG.Error(utils.GetErrorMsg(utils.GetError))
		middleware.ResponseError(ctx, utils.NewGlobalError(utils.GetError, err))
		return
	}
	middleware.ResponseSuccess(ctx, nodeList)
}

// GetNodeDetail 获取node详情
// ListPage godoc
// @Summary      获取node详情
// @Description  获取node详情
// @Tags         node
// @ID           /api/k8s/node/detail
// @Accept       json
// @Produce      json
// @Param        name  query  string  true  "nodeName"
// @Success      200 {object}  middleware.Response"{"code": 200, msg="","data": coreV1.Node}"
// @Router       /api/k8s/node/detail [get]
func (n *nodeController) GetNodeDetail(ctx *gin.Context) {
	parmas := &dto.NodeNameInput{}
	if err := parmas.BindValidate(ctx); err != nil {
		logger.LG.Error(utils.GetErrorMsg(utils.ParamBindError))
		middleware.ResponseError(ctx, utils.NewGlobalError(utils.ParamBindError, err))
	}
	nodeDetail, err := service.Node.GetNodeDetail(parmas.Name)
	if err != nil {
		logger.LG.Error(utils.GetErrorMsg(utils.GetError))
		middleware.ResponseError(ctx, utils.NewGlobalError(utils.GetError, err))
		return
	}
	middleware.ResponseSuccess(ctx, nodeDetail)
}
